home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / stut_src / terminal.c < prev    next >
Text File  |  1996-05-27  |  17KB  |  919 lines

  1. /*
  2.  * terminal.c
  3.  *
  4.  * Purpose:
  5.  * --------
  6.  * Gestion du terminal de sortie (Minitel, Modem)
  7.  *
  8.  * History:
  9.  * --------
  10.  * 1993: fplanque: Created
  11.  */
  12.  
  13.  
  14.      #include "!OPTIONS.H"                /* Options de compilation */         
  15.     #define    THIS_FILE    "TERMINAL.C v1.00 - 03.95"
  16.           
  17.  
  18. /*
  19.  * System headers:
  20.  */
  21.     #include    <stdio.h>
  22.     #include <string.h>
  23.     #include    <tos.h>                    /* Pour les appels au BIOS */
  24.    
  25.  
  26. /*
  27.  * Custom headers:
  28.  */
  29.     #include "SPEC_PU.H"
  30.     #include "SERV_PU.H"                /* Codes touches etc... */
  31.     #include "ACCENTPU.H"
  32.     #include    "POPUP_PU.H"
  33.     #include    "SRIAL_PU.H"
  34.     #include    "DEBUG_PU.H"    
  35.     #include "TERM_PU.H"
  36.     #include "MINITEL.H"                /* Codes minitel */
  37.  
  38.  
  39. /*
  40.  * ------------------------ FUNCTIONS -------------------------
  41.  */
  42.  
  43.  
  44. /*
  45.  * init_MinitelPort(-)
  46.  *
  47.  * Purpose:
  48.  * --------
  49.  * Init d'un port s‚rie reli‚ … un minitel
  50.  *
  51.  * Algorythm:
  52.  * ----------  
  53.  * Passe par toutes vitesse RS autres ke 4800
  54.  * a chak fois dem au minitel de se mettre en 4800
  55.  * mets 4800 … la fin
  56.  * init ‚cran minitel
  57.  * 
  58.  * History:
  59.  * --------
  60.  * 30.09.94: fplanque: Created
  61.  * 19.11.94: flush RX at end
  62.  */
  63. void    init_MinitelPort(
  64.                 int    n_port )            /* In: Port concern‚ */
  65. {
  66.     static const long    l_MinitelRates[] = { 300, 9600, 1200 };
  67.     int        i;
  68.  
  69.     TRACE1( "Init port %d pour minitel", n_port );
  70.  
  71.     /*
  72.      * Utilse toutes les vitesses tour … tour:
  73.      */
  74.     for( i = 0; i < 3; i++ )
  75.     {
  76.         TRACE1( "  Vitesse test‚e: %ld", l_MinitelRates[i] );
  77.  
  78.         /*
  79.          * Fixe vitesse RS:
  80.          */
  81.         SetPort( n_port, l_MinitelRates[i], 'E', 7, MODE_ASYNC1STOP, HANDSHAKE_NONE ); 
  82.  
  83.         /*
  84.          * Passe la prise du minitel en 4800 bps:
  85.          */
  86.         Bconout( n_port, '-' );
  87.  
  88.         Bconout( n_port, ESC );
  89.         Bconout( n_port, PRO2 );
  90.         Bconout( n_port, PROG );
  91.         Bconout( n_port, PERI_4800 );
  92.         
  93.         /*
  94.          * Laise le temps … 20 bytes de partir vers le Minitel:
  95.          */
  96.         /* wait( 20 * 100 / (l_MinitelRates[i]/10) ); */
  97.         /*
  98.          * Attend que les codes aient ‚t‚ ‚mis:
  99.          */
  100.         Serial_WaitTXEmpty( n_port );
  101.  
  102.     }
  103.  
  104.  
  105.     /*
  106.      * Fixe vitesse RS … 4800:
  107.      */
  108.     SetPort( n_port, 4800, 'E', 7, MODE_ASYNC1STOP, HANDSHAKE_NONE ); 
  109.     
  110.     /*
  111.      * initialise l'‚cran:
  112.      */
  113.     csr_off( n_port );
  114.     full_cls( n_port );    
  115.     str_conout( n_port, STUT_FULLNAME "\r\n" STUT_RELEASEINFO "\r\n" );
  116.  
  117.     /*
  118.      * Allume l'‚cran si n‚cessaire:
  119.      */
  120.     allume_minitel( n_port );
  121.  
  122.     /*
  123.      * Vide buffer d'entr‚e:
  124.      * (Tout ce qui a ‚t‚ re‡u pdt que le minitel et la RS n'‚taient
  125.      *  pas … la mˆme vitesse n'est pas interpr‚table!! )
  126.      */
  127.     FlushRXBuffer( n_port );
  128. }
  129.  
  130. /*
  131.  * MinitelPort_ChgeSpeed(-)
  132.  *
  133.  * Purpose:
  134.  * --------
  135.  * Chge la vitesse d'un port s‚rie reli‚ … un minitel
  136.  *
  137.  * Algo:
  138.  * -----
  139.  * - Demande au minitel de changer de vitesse
  140.  * - Attend que TX soit vide
  141.  * - Chge vitesse de la prise s‚rie
  142.  *
  143.  * History:
  144.  * --------
  145.  * 08.04.95: fplanque: Created
  146.  */
  147. void    MinitelPort_ChgeSpeed(
  148.                 int    n_port,            /* In: Port concern‚ */
  149.                 long    l_newspeed )    /* In: Code nouvelle vitesse */
  150. {
  151.     int n_SpeedCode;
  152.  
  153.     if( l_newspeed == 1200 )
  154.     {
  155.         n_SpeedCode = PERI_1200;
  156.     }
  157.     else if( l_newspeed == 4800 )
  158.     {
  159.         n_SpeedCode = PERI_4800;
  160.     }
  161.     else
  162.     {
  163.         signale( "Impossible de passer le minitel … la vitesse demand‚e" );
  164.         return;
  165.     }
  166.  
  167.     /*
  168.      * Passe la prise du minitel … la vitesse demand‚e:
  169.      */
  170.     Bconout( n_port, ESC );
  171.     Bconout( n_port, PRO2 );
  172.     Bconout( n_port, PROG );
  173.     Bconout( n_port, n_SpeedCode );
  174.     
  175.     /*
  176.      * Attend que les codes aient ‚t‚ ‚mis:
  177.      */
  178.     Serial_WaitTXEmpty( n_port );
  179.  
  180.     /*
  181.      * Fixe vitesse RS:
  182.      */
  183.     SetPort( n_port, l_newspeed, 'E', 7, MODE_ASYNC1STOP, HANDSHAKE_NONE ); 
  184.     
  185.     /*
  186.      * Vide buffer d'entr‚e:
  187.      * (Tout ce qui a ‚t‚ re‡u pdt que le minitel et la RS n'‚taient
  188.      *  pas … la mˆme vitesse n'est pas interpr‚table!! )
  189.      */
  190.     FlushRXBuffer( n_port );
  191. }
  192.  
  193.  
  194. /*
  195.  * param_local(-)
  196.  *
  197.  * Purpose:
  198.  * --------
  199.  * ParamŠtre Minitel pour connexion locale
  200.  *
  201.  * Algorythm:
  202.  * ----------  
  203.  * Au cas ou on est en mode T‚l‚info, 
  204.  *  il faut en sortir avec un s‚quence sp‚ciale
  205.  * On fait un Reset Vid‚otex      
  206.  * Empeche l'echo local des caractŠres tap‚s
  207.  *
  208.  * Suggest:
  209.  * ------
  210.  * Faire le flush ailleurs pour ‚viter le wait(5)
  211.  *
  212.  * History:
  213.  * --------
  214.  * 1993: fplanque: Created
  215.  * 05.12.94: fplanque: Flusx RX a la fin
  216.  */
  217. void    param_local( 
  218.             int device )    /* In: No périf concerné */
  219. {
  220.     /*
  221.      * Au cas ou on est en mode T‚l‚info, il faut en sortir avec un s‚quence sp‚ciale: 
  222.      */
  223.     Bconout ( device, ESC );        /* Retour en std T‚l‚tel */
  224.     Bconout ( device, CSI );
  225.     Bconout ( device, 0x3F );
  226.     Bconout ( device, 0x7B );
  227.  
  228.     /*
  229.      * On fait un Reset Vid‚otex 
  230.      */
  231.     Bconout ( device, ESC );        /* Reset du terminal T‚l‚tel */
  232.     Bconout ( device, PRO1 );
  233.     Bconout ( device, RESET );
  234.         
  235.     /*
  236.      * On doit empecher l'echo local des caractŠres tap‚s: 
  237.      */
  238.     Bconout ( device, ESC );        /* Blocage Module MODEM */
  239.     Bconout ( device, PRO3 );
  240.     Bconout ( device, AIGUIL_OFF );
  241.     Bconout ( device, RE_MODEM );
  242.     Bconout ( device, EM_MODEM );
  243.  
  244.     /*
  245.      * On re‡oit des saloperies en retour, il va falloir les ‚liminer!
  246.      */
  247.     wait( 5 );
  248.     FlushRXBuffer( device );
  249. }
  250.  
  251.  
  252. /*
  253.  * allume_minitel(-)
  254.  *
  255.  * Purpose:
  256.  * --------
  257.  * Sortie du mode veille sur M2:
  258.  *
  259.  * History:
  260.  * --------
  261.  * 08.02.95: fplanque: Created
  262.  */
  263. void    allume_minitel( 
  264.             int device )    /* In: No p‚rif concern‚ */
  265. {
  266.     Bconout ( device, ESC );
  267.     Bconout ( device,    PRO3 );
  268.     Bconout ( device, P_STOP );
  269.     Bconout ( device, RE_ECRAN );    /* 0x58 */
  270.     Bconout ( device, VEILLE );
  271. }
  272.  
  273. /*
  274.  * eteind_minitel(-)
  275.  *
  276.  * Purpose:
  277.  * --------
  278.  * passe en mode veille sur M2:
  279.  *
  280.  * History:
  281.  * --------
  282.  * 08.02.95: fplanque: Created
  283.  */
  284. void    eteind_minitel( 
  285.             int device )    /* In: No p‚rif concern‚ */
  286. {
  287.     Bconout ( device, ESC );
  288.     Bconout ( device,    PRO3 );
  289.     Bconout ( device, P_START );
  290.     Bconout ( device, RE_ECRAN );    /* 0x58 */
  291.     Bconout ( device, VEILLE );    /* 0x41 */
  292. }
  293.  
  294.  
  295. /*
  296.  * envoi_porteuse(-)
  297.  *
  298.  * Purpose:
  299.  * --------
  300.  * Envoi de porteuse sur une voie utilisant un Minitel pour Modem
  301.  *
  302.  * Algorythm:
  303.  * ----------  
  304.  *    Retournement modem puis envoi porteuse
  305.  *
  306.  * History:
  307.  * --------
  308.  * 1993: fplanque: Created
  309.  */
  310. #if ACCEPT_REMOTE
  311. void    envoi_porteuse( 
  312.             int device )    /* In: No périf concerné */
  313. {
  314.     /*
  315.      * Retournement du modem: 
  316.      */
  317.     Bconout ( device, ESC );
  318.     Bconout ( device, PRO1 );
  319.     Bconout ( device, OPPO );        /* 0x6F */
  320.  
  321.     /*
  322.      * Envoi porteuse: 
  323.      */
  324.     Bconout ( device, ESC );
  325.     Bconout ( device, PRO1 );
  326.     Bconout ( device, CONNEXION );        /* 0x68 */
  327. }
  328. #endif
  329.  
  330.  
  331. /*
  332.  * deconnecte_modem(-)
  333.  *
  334.  * Purpose:
  335.  * --------
  336.  * Deconnecte le modem d'un Minitel
  337.  *
  338.  * History:
  339.  * --------
  340.  * 1993: fplanque: Created
  341.  * 08.02.95: Lib‚ration de ligne sur le M2
  342.  */
  343. void    deconnecte_modem( 
  344.             int device )
  345. {
  346.     /*
  347.      * Deconnexion modem: 
  348.      */
  349.     Bconout ( device, ESC );
  350.     Bconout ( device, PRO1 );
  351.     Bconout ( device, DECONNEXION );        /* 0x67 */
  352.  
  353.     /*
  354.      * Lib‚ration de ligne: 
  355.      * En effet, sur Minitel 2, cette lib‚ration ne se fait pas avec
  356.      * le PRO1+DECO si le bit RPL vaut 1, et comme c'est le cas 
  357.      * en phase deconnexion... (vu au cours des tests)
  358.      * Voir Ý6 p23 dans le STUM2
  359.      */
  360.     Bconout ( device, ESC );
  361.     Bconout ( device, PRO1 );
  362.     Bconout ( device, LL );                    /* 0x57 */
  363. }
  364.  
  365.  
  366.  
  367. /*
  368.  * param_normal(-)
  369.  *
  370.  * Purpose:
  371.  * --------
  372.  * ParamŠtre Minitel(s) pour connexion normale
  373.  *
  374.  * Algorythm:
  375.  * ----------  
  376.  * Bloque aiguillage modem -> ecran
  377.  * Installe aiguillage prise -> ecran
  378.  *  L'écran du Minitel local affiche alors la même chose que
  379.  *  celui du connecté
  380.  * Bloque aiguillage clavier -> modem 
  381.  * Installe aiguillage clavier -> prise
  382.  *  Lorsqu'on tape au clavier du Minitel local, on se fait alors
  383.  *  passer pour le connect‚
  384.  *
  385.  * History:
  386.  * --------
  387.  * 1993: fplanque: Created
  388.  */
  389. void    param_normal( 
  390.             int device )
  391. {
  392.     /*
  393.      * Bloque aiguillage modem -> ecran: 
  394.      */
  395.     Bconout ( device, ESC );
  396.     Bconout ( device,    PRO3 );
  397.     Bconout ( device, AIGUIL_OFF );
  398.     Bconout ( device, RE_ECRAN );
  399.     Bconout ( device, EM_MODEM );
  400.  
  401.     /*
  402.      * Installe aiguillage prise -> ecran: 
  403.      */
  404.     Bconout ( device, ESC );
  405.     Bconout ( device,    PRO3 );
  406.     Bconout ( device, AIGUIL_ON );
  407.     Bconout ( device, RE_ECRAN );
  408.     Bconout ( device, EM_PRISE );
  409.  
  410.     /*
  411.      * Bloque aiguillage clavier -> modem: 
  412.      */
  413.     Bconout ( device, ESC );
  414.     Bconout ( device,    PRO3 );
  415.     Bconout ( device, AIGUIL_OFF );
  416.     Bconout ( device, RE_MODEM );
  417.     Bconout ( device, EM_CLAVIER );
  418.  
  419.     /*
  420.      * Installe aiguillage clavier -> prise: 
  421.      */
  422.     Bconout ( device, ESC );
  423.     Bconout ( device,    PRO3 );
  424.     Bconout ( device, AIGUIL_ON );
  425.     Bconout ( device, RE_PRISE );
  426.     Bconout ( device, EM_CLAVIER );
  427. }
  428.  
  429.  
  430.  
  431. /*
  432.  * param_minitel(-)
  433.  *
  434.  * Purpose:
  435.  * --------
  436.  * ParamŠtre Calvier Minitel en d‚but de connexion
  437.  *
  438.  * Suggest:
  439.  * --------
  440.  * Appliquer aussi au minitel distant:
  441.  *
  442.  * History:
  443.  * --------
  444.  * 1993: fplanque: Created
  445.  */
  446. void    param_minitel( 
  447.                 int     device,
  448.                 BOOL    b_Connecte )    /* In: TRUE si connect‚ */
  449. {
  450.     /*
  451.      * Passe clavier en minuscules: 
  452.      */
  453.     Bconout ( device, ESC );
  454.     Bconout ( device,    PRO2 );
  455.     Bconout ( device, P_START );
  456.     Bconout ( device, MINUSCULES );
  457.  
  458.     /*
  459.      * Passe en mode clavier ‚tendu:
  460.      */
  461.     Bconout ( device, ESC );
  462.     Bconout ( device,    PRO3 );
  463.     Bconout ( device, P_START );
  464.     Bconout ( device, RE_CLAVIER );
  465.     Bconout ( device, ETEN );
  466.  
  467.     /*
  468.      * Fait de mˆme pour le clavier du connect‚:
  469.      */
  470.     if( b_Connecte )
  471.     {
  472.         /*
  473.          * Transparence protocole pour ce qui va suivre:
  474.          */    
  475.         Bconout ( device, ESC );
  476.         Bconout ( device,    PRO2 );
  477.         Bconout ( device, TRANSPARENCE );
  478.         Bconout ( device, 9 );
  479.     
  480.         /*
  481.          * Passe clavier en minuscules: 
  482.          */
  483.         Bconout ( device, ESC );
  484.         Bconout ( device,    PRO2 );
  485.         Bconout ( device, P_START );
  486.         Bconout ( device, MINUSCULES );
  487.  
  488.         /*
  489.          * Passe en mode clavier ‚tendu:
  490.          */
  491.         Bconout ( device, ESC );
  492.         Bconout ( device,    PRO3 );
  493.         Bconout ( device, P_START );
  494.         Bconout ( device, RE_CLAVIER );
  495.         Bconout ( device, ETEN );
  496.     }
  497. }
  498.  
  499.  
  500. /*
  501.  * csr_on(-)
  502.  *
  503.  * Purpose:
  504.  * --------
  505.  * Affiche le curseur du terminal Minitel
  506.  *
  507.  * History:
  508.  * --------
  509.  * 1993: fplanque: Created
  510.  */
  511. void    csr_on( int device )
  512. {
  513.     /*
  514.      * Allume curseur MINITEL: 
  515.      */
  516.     Bconout ( device, CSR_ON );
  517.     
  518. }
  519.  
  520.  
  521.  
  522. /*
  523.  * csr_off(-)
  524.  *
  525.  * Purpose:
  526.  * --------
  527.  * Efface le curseur du terminal Minitel
  528.  *
  529.  * History:
  530.  * --------
  531.  * 1993: fplanque: Created
  532.  */
  533. void    csr_off( int device )
  534. {
  535.     /*
  536.      * Eteind curseur MINITEL: 
  537.      */
  538.     Bconout ( device, CSR_OFF );
  539.     
  540. }
  541.  
  542.  
  543.  
  544. /*
  545.  * pos(-)
  546.  *
  547.  * Purpose:
  548.  * --------
  549.  * Positionne le curseur du terminal Minitel
  550.  *
  551.  * History:
  552.  * --------
  553.  * 1993: fplanque: Created
  554.  */
  555. void    pos( 
  556.             int device,    /* In: No périf concerné */
  557.             int x,         /* In: Position horizontale (colomne) */
  558.             int y )        /* In: Position verticale (ligne) */
  559. {
  560.     /*
  561.      * Positionne curseur sur Minitel: 
  562.      */
  563.     Bconout ( device, 31 );
  564.     Bconout ( device, 64 + y );
  565.     Bconout ( device, 64 + x );
  566. }
  567.  
  568.  
  569.  
  570. /*
  571.  * start_l0(-)
  572.  *
  573.  * Purpose:
  574.  * --------
  575.  * Se place sur la ligne 0 et l'efface en vue de l'affichage d'un message
  576.  *
  577.  * History:
  578.  * --------
  579.  * 11.05.94: fplanque: Created
  580.  */
  581. void    start_l0(  
  582.             int device )    /* In: No p‚rif concern‚ */
  583. {
  584.     /*
  585.      * Entre ds la ligne 0: 
  586.      */
  587.     Bconout ( device, US );        /* Pos en ligne 0 */
  588.     Bconout ( device, 64+0 );
  589.     Bconout ( device, 64+1 );
  590.     Bconout ( device, CAN );    /* CAN */
  591. }
  592.  
  593.  
  594.  
  595. /*
  596.  * end_l0(-)
  597.  *
  598.  * Purpose:
  599.  * --------
  600.  * Sort de la ligne0 et retourne … l'‚cran normal
  601.  *
  602.  * Notes:
  603.  * ------
  604.  *    un LF sur le Minitel sort de la ligne0 et retourne … la position
  605.  * pr‚c‚dente du curseur en restituant les attributs et tout le reste...
  606.  *
  607.  * History:
  608.  * --------
  609.  * 10.05.94: fplanque: Created
  610.  */
  611. void    end_l0(  
  612.             int device )    /* In: No périf concerné */
  613. {
  614.     /*
  615.      * Sort de la ligne 0: 
  616.      */
  617.     Bconout ( device, LF );
  618. }
  619.  
  620.  
  621.  
  622. /*
  623.  * full_cls(-)
  624.  *
  625.  * Purpose:
  626.  * --------
  627.  * Efface l'‚cran complet du terminal Minitel
  628.  *
  629.  * Algorythm:
  630.  * ----------  
  631.  * Efface aussi la ligne 0!
  632.  *
  633.  * History:
  634.  * --------
  635.  * 1993: fplanque: Created
  636.  */
  637. void    full_cls( int device )
  638. {
  639.     Bconout ( device, US );        /* Pos en ligne 0 */
  640.     Bconout ( device, 64+0 );
  641.     Bconout ( device, 64+1 );
  642.     Bconout ( device, CAN );    /* CAN */
  643.     Bconout ( device, FF );        /* CLS */
  644. }
  645.  
  646.  
  647.  
  648.  
  649. /*
  650.  * set_tcolor(-)
  651.  *
  652.  * Purpose:
  653.  * --------
  654.  * Fixe la couleur d'‚criture du Minitel
  655.  *
  656.  * History:
  657.  * --------
  658.  * 1993: fplanque: Created
  659.  */
  660. void    set_tcolor( int device, int color )
  661. {
  662.     Bconout ( device, 27 );                /* Esc */
  663.     Bconout ( device, 64 + color );    /* Code couleur */
  664. }
  665.  
  666. /*
  667.  * set_tcolor(-)
  668.  *
  669.  * Purpose:
  670.  * --------
  671.  * passe en inverse vid‚o
  672.  *
  673.  * History:
  674.  * --------
  675.  * 13.01.95: fplanque: Created
  676.  */
  677. void    term_setReverse( int device )
  678. {
  679.     Bconout ( device, 27 );                /* Esc */
  680.     Bconout ( device, MNTL_INVERSE_ON );    
  681. }
  682.  
  683.  
  684. /*
  685.  * cconout(-)
  686.  *
  687.  * Purpose:
  688.  * --------
  689.  * Envoi d'un caractŠre au terminal
  690.  *
  691.  * Notes:
  692.  * ------
  693.  * L'utilisation de cette fonction n'est franchement pas économique!
  694.  *
  695.  * Suggest:
  696.  * --------
  697.  * Impl‚menter des appels par pointeur en fonction du type de terminal
  698.  *
  699.  * History:
  700.  * --------
  701.  * 1993: fplanque: Created
  702.  * 24.05.94: Conversion des car>127
  703.  */
  704. void    cconout ( int device, int code )
  705. {
  706.     if ( code <= 127 )
  707.     {    /*
  708.          * Si code compatible Minitel: 
  709.          */
  710.         Bconout( device, code );
  711.     }
  712.     else
  713.     {    /*
  714.          * Si caractŠre sp‚cial: CONVERSION
  715.          */
  716.         char *    pS_equiv = convert_Asc2Vdt( code );
  717.         while( *pS_equiv != '\0' )
  718.         {
  719.             Bconout( device, *(pS_equiv++) );
  720.         }
  721.     }
  722.  
  723. }
  724.  
  725.  
  726.  
  727.  
  728. /*
  729.  * mconout(-)
  730.  *
  731.  * Purpose:
  732.  * -------- 
  733.  * Multiple conout
  734.  * Affichage d'un caractŠre r‚p‚t‚ plusieurs fois sur terminal Minitel
  735.  *
  736.  * Algorythm:
  737.  * ----------  
  738.  * Utilise proc‚dure de r‚p‚tition <car 18 64+nb-1> du minitel
  739.  *
  740.  * History:
  741.  * --------
  742.  * 1993: fplanque: Created
  743.  */
  744. void    mconout( 
  745.             int device, 
  746.             int code, 
  747.             int nb )            /* In: Nombre d'occurences … afficher */
  748. {
  749.     if ( nb > 0 )
  750.     {
  751.         Bconout( device, code );    /* Affiche 1 fois */
  752.         
  753.         if ( nb == 2 )
  754.         {
  755.             Bconout( device, code );    /* Affiche 1 deuxiŠme fois */
  756.         }
  757.         else if ( nb > 2 )
  758.         {
  759.             Bconout( device, 18 );            /* r‚p‚tition */
  760.             Bconout( device, 64 + nb-1 );    /* nb-1 fois */
  761.         }
  762.  
  763.     }
  764. }
  765.  
  766.  
  767.  
  768. /*
  769.  * str_conout(-)
  770.  *
  771.  * Purpose:
  772.  * --------
  773.  * Envoi d'une chaine de caractŠres au terminal
  774.  *
  775.  * History:
  776.  * --------
  777.  * 1993: fplanque: Created
  778.  */
  779. void    str_conout( 
  780.             int                 device, 
  781.             const char *    string )
  782. {
  783.     /* 
  784.      * Variables: 
  785.      */
  786.     int    code;
  787.  
  788.  
  789.     /*
  790.      * Envoie la page dans le tampon de sortie: 
  791.      */
  792.     while
  793.     ( 
  794.         code = *(string ++),
  795.         code != '\0'
  796.     )
  797.     {
  798.         if ( code <= 127 )
  799.         {    /*
  800.              * Si code compatible Minitel: 
  801.              */
  802.             Bconout( device, code );
  803.         }
  804.         else
  805.         {    /*
  806.              * Si caractŠre sp‚cial: CONVERSION
  807.              */
  808.             char *    pS_equiv = convert_Asc2Vdt( code );
  809.             while( *pS_equiv != '\0' )
  810.             {
  811.                 Bconout( device, *(pS_equiv++) );
  812.             }
  813.         }
  814.     }
  815.  
  816. }
  817.  
  818.  
  819. /*
  820.  * str_nconout(-)
  821.  *
  822.  * Purpose:
  823.  * --------
  824.  * Envoi d'une chaine de caractŠres au terminal
  825.  * avec contr“le d'uin nb de cars maximum
  826.  *
  827.  * History:
  828.  * --------
  829.  * 13.01.95: fplanque: Created base on str_conout
  830.  */
  831. void    str_nconout( 
  832.             int                 device, 
  833.             const char    *    string,
  834.             int                n_maxlen )    /* In: Longueur maximum */
  835. {
  836.     /* 
  837.      * Variables: 
  838.      */
  839.     int    code;
  840.  
  841.  
  842.     /*
  843.      * Envoie la page dans le tampon de sortie: 
  844.      */
  845.     while
  846.     ( 
  847.         code = *(string ++),
  848.         code != '\0' && (n_maxlen--) > 0
  849.     )
  850.     {
  851.         if ( code <= 127 )
  852.         {    /*
  853.              * Si code compatible Minitel: 
  854.              */
  855.             Bconout( device, code );
  856.         }
  857.         else
  858.         {    /*
  859.              * Si caractŠre sp‚cial: CONVERSION
  860.              */
  861.             char *    pS_equiv = convert_Asc2Vdt( code );
  862.             while( *pS_equiv != '\0' )
  863.             {
  864.                 Bconout( device, *(pS_equiv++) );
  865.             }
  866.         }
  867.     }
  868.  
  869. }
  870.  
  871.  
  872.  
  873. /*
  874.  * sconout(-)
  875.  *
  876.  * Purpose:
  877.  * --------
  878.  * Envoi d'une s‚quence au terminal
  879.  *
  880.  * History:
  881.  * --------
  882.  * 1993: fplanque: Created
  883.  */
  884. void    sconout(
  885.             int        device, 
  886.             long        length, 
  887.             char    *    seq )
  888. {
  889. #define    WATCH_SCONOUT    NO0
  890.  
  891.     /* Variables */
  892.         register    long    offset;                /* Offset dans la chaine */
  893.         int                code;                    /* Code … afficher */
  894.  
  895. #if    WATCH_SCONOUT
  896.     printf( "\x1BY\x20\x62***");
  897. #endif
  898.     
  899.     /* Envoie la page dans le tampon de sortie: */
  900.         for (    offset = 0; offset < length; offset++ )    
  901.         {
  902.             code = seq[offset];        /* Code … traiter */
  903.             if ( code <= 127 )
  904.             {    /* Si code compatible Minitel: */
  905.                 Bconout ( device, code );
  906.             }
  907.         }
  908.     
  909. #if    WATCH_SCONOUT
  910.     printf( "\x1BY\x20\x62---");
  911. #endif
  912.  
  913.     /* Ici, Offset=length ::    printf("Offset=%lu\n",offset); */
  914.     
  915. #undef    WATCH_SCONOUT
  916. }
  917.  
  918.  
  919.